Imports AxSftTreeLib70
Imports SftTreeLib70
'Imports Softelvdm.OLEConvert
Public Class Form1
Inherits System.Windows.Forms.Form
#Region " Windows Form Designer generated code "
Public Sub New()
MyBase.New()
'This call is required by the Windows Form Designer.
InitializeComponent()
'Add any initialization after the InitializeComponent() call
End Sub
'Form overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
Public WithEvents Command1 As System.Windows.Forms.Button
Public WithEvents ToolTip1 As System.Windows.Forms.ToolTip
Public WithEvents Attach As System.Windows.Forms.PictureBox
Public WithEvents EditControl As System.Windows.Forms.TextBox
Friend WithEvents AxSftTree1 As AxSftTreeLib70.AxSftTree
Friend WithEvents SftHelperComponent1 As Softelvdm.OCXHelper.SftHelperComponent
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(Form1))
Me.Command1 = New System.Windows.Forms.Button()
Me.ToolTip1 = New System.Windows.Forms.ToolTip(Me.components)
Me.Attach = New System.Windows.Forms.PictureBox()
Me.AxSftTree1 = New AxSftTreeLib70.AxSftTree()
Me.EditControl = New System.Windows.Forms.TextBox()
Me.SftHelperComponent1 = New Softelvdm.OCXHelper.SftHelperComponent(Me.components)
CType(Me.AxSftTree1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'Command1
'
Me.Command1.Anchor = (System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right)
Me.Command1.BackColor = System.Drawing.SystemColors.Control
Me.Command1.Cursor = System.Windows.Forms.Cursors.Default
Me.Command1.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.Command1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Command1.ForeColor = System.Drawing.SystemColors.ControlText
Me.Command1.Location = New System.Drawing.Point(488, 7)
Me.Command1.Name = "Command1"
Me.Command1.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.Command1.Size = New System.Drawing.Size(73, 24)
Me.Command1.TabIndex = 7
Me.Command1.Text = "&Close"
'
'Attach
'
Me.Attach.Cursor = System.Windows.Forms.Cursors.Default
Me.Attach.Image = CType(resources.GetObject("Attach.Image"), System.Drawing.Bitmap)
Me.Attach.Location = New System.Drawing.Point(488, 55)
Me.Attach.Name = "Attach"
Me.Attach.Size = New System.Drawing.Size(10, 16)
Me.Attach.TabIndex = 9
Me.Attach.TabStop = False
Me.Attach.Visible = False
'
'AxSftTree1
'
Me.AxSftTree1.Anchor = (((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right)
Me.AxSftTree1.Location = New System.Drawing.Point(8, 7)
Me.AxSftTree1.Name = "AxSftTree1"
Me.AxSftTree1.OcxState = CType(resources.GetObject("AxSftTree1.OcxState"), System.Windows.Forms.AxHost.State)
Me.AxSftTree1.Size = New System.Drawing.Size(472, 360)
Me.AxSftTree1.TabIndex = 6
'
'EditControl
'
Me.EditControl.AcceptsReturn = True
Me.EditControl.AutoSize =False
Me.EditControl.BackColor = System.Drawing.SystemColors.Window
Me.EditControl.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
Me.EditControl.Cursor = System.Windows.Forms.Cursors.IBeam
Me.EditControl.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.EditControl.ForeColor = System.Drawing.SystemColors.WindowText
Me.EditControl.Location = New System.Drawing.Point(488, 79)
Me.EditControl.MaxLength = 0
Me.EditControl.Name = "EditControl"
Me.EditControl.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.EditControl.Size = New System.Drawing.Size(73, 19)
Me.EditControl.TabIndex = 8
Me.EditControl.Text = "EditControl"
Me.EditControl.Visible = False
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.CancelButton = Me.Command1
Me.ClientSize = New System.Drawing.Size(568, 375)
Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.Attach, Me.AxSftTree1, Me.EditControl, Me.Command1})
Me.Name = "Form1"
Me.Text = "Softel vdm, Inc. - Email Sample"
CType(Me.AxSftTree1, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
End Sub
#End Region
'--locate-marker--
Private m_InboxFolder As Integer = 0 ' IDs for various top-level folders
Private m_OutboxFolder As Integer = 0
Private m_SavedFolder As Integer = 0
Private m_DeletedFolder As Integer = 0
Private m_BoldFont As stdole.IFontDisp = Nothing ' saved bold font
' in case many cells use the same font, it preserves resources to
' save one instance of an OLE font object
Private Sub Command1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Command1.Click
Application.Exit()
End Sub
Private Function AddFolder(ByVal Folder As String, ByVal Desc As String, ByVal Count As Integer) As Integer
Dim ItemIndex As Integer
ItemIndex = AxSftTree1.Items.Add(Folder) ' add folder
AxSftTree1.get_Cell(ItemIndex, 1).Text = Desc ' add description
AxSftTree1.get_Cell(ItemIndex, 3).Text = Count.ToString() ' add number of messages
AxSftTree1.get_Cell(ItemIndex, 3).Data = Count ' also save number of messages for sorting
' make the folder name bold
If m_BoldFont Is Nothing Then
m_BoldFont = AxSftTree1.get_Cell(ItemIndex, 0).Font
m_BoldFont.Bold = True
End If
AxSftTree1.get_Cell(ItemIndex, 0).Font = m_BoldFont
' if this folder has no messages (ie. dependents), we still want the
' folder graphic, not the email (leaf) graphic
If Count = 0 Then
AxSftTree1.get_Item(ItemIndex).Image = AxSftTree1.Items.ItemImageExpandable
End If
AddFolder = AxSftTree1.get_Item(ItemIndex).ID
End Function
Private Function AddMessage(ByVal Level As Integer, ByVal Email As String, ByVal Desc As String, ByVal Dt As String, ByVal Size As Integer, ByVal Attachment As Boolean) As Integer
Dim ItemIndex As Integer
ItemIndex = AxSftTree1.Items.Add(Email) ' add folder
AxSftTree1.get_Item(ItemIndex).Level = Level
AxSftTree1.get_Cell(ItemIndex, 1).Text = Desc ' add description
AxSftTree1.get_Cell(ItemIndex, 2).Text = Dt ' add date
AxSftTree1.get_Cell(ItemIndex, 3).Text = Size.ToString() + "K"
AxSftTree1.get_Cell(ItemIndex, 3).Data = Size ' also save size for sorting
' if this email has replies (ie. dependents), we still want the
' email graphic, not the expand folder image
AxSftTree1.get_Item(ItemIndex).Image = AxSftTree1.Items.ItemImageLeaf
' if the email has an attachment, show the image
If Attachment Then
AxSftTree1.get_Cell(ItemIndex, 1).Image.NETImageObject = Attach.Image
AxSftTree1.get_Cell(ItemIndex, 1).ImageHAlign = SftTreeHAlignConstants.halignSftTreeRight
End If
Return AxSftTree1.get_Item(ItemIndex).ID
End Function
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim ItemIndex As Integer
m_InboxFolder = AddFolder("Inbox", "Viewed and unviewed mail", 10)
AddMessage(1, "support@softelvdm.com", "Re: A support question", "10/09/05", 88, True)
AddMessage(1, "anyone@acompany.com", "Re: Why did you say that", "10/10/05", 5, False)
AddMessage(1, "anyone@acompany.com", "Re: You're fired", "10/11/05", 82, True)
AddMessage(1, "anyone@acompany.com", "Re: You're hired", "10/11/05", 6, False)
ItemIndex = AxSftTree1.Items.ItemIndex(m_InboxFolder)
AxSftTree1.get_Item(ItemIndex).Collapse(False)
m_OutboxFolder = AddFolder("Outbox", "Mail about to be sent", 2)
AddMessage(1, "me@mycompany.com", "Re: You're fired", "10/11/05", 5, False)
AddMessage(1, "anyone@acompany.com", "Re: Why did you say that", "10/10/05", 5, False)
ItemIndex = AxSftTree1.Items.ItemIndex(m_OutboxFolder)
AxSftTree1.get_Item(ItemIndex).Collapse(False)
m_SavedFolder = AddFolder("Saved", "Saved messages", 2)
AddMessage(1, "me@mycompany.com", "A support question", "10/09/05", 3, False)
AddMessage(2, "support@softelvdm.com", "Re: A support question", "10/09/05", 88, True)
AddMessage(3, "me@mycompany.com", "Re: A support question", "10/09/05", 3, False)
AddMessage(1, "me@mycompany.com", "Why did you say that", "10/06/05", 5, False)
AddMessage(2, "anyone@acompany.com", "Re: Why did you say that", "10/10/05", 5, False)
AddMessage(1, "me@mycompany.com", "You're fired", "10/08/05", 2, False)
AddMessage(2, "anyone@acompany.com", "Re: You're fired", "10/11/05", 82, False)
AddMessage(1, "me@mycompany.com", "You're hired", "10/01/05", 4, False)
AddMessage(1, "anyone@acompany.com", "Re: You're hired", "10/11/05", 6, False)
ItemIndex = AxSftTree1.Items.ItemIndex(m_SavedFolder)
AxSftTree1.get_Item(ItemIndex).Collapse(False)
m_DeletedFolder = AddFolder("Deleted", "Deleted messages", 0)
AxSftTree1.ColumnsObj.MakeOptimal()
AxSftTree1.Items.RecalcHorizontalExtent()
AxSftTree1.Splitter.MakeOptimal()
' clear column header pictures
AxSftTree1.get_Header(1).Image.Clear()
AxSftTree1.get_Header(2).Image.Clear()
AxSftTree1.get_Header(3).Image.Clear()
AxSftTree1.Items.Current = 0
AxSftTree1_CaretChange(Me, New _DSftTreeEvents_CaretChangeEvent(0))
End Sub
Private Sub AxSftTree1_CaretChange(ByVal sender As Object, ByVal e As AxSftTreeLib70._DSftTreeEvents_CaretChangeEvent) Handles AxSftTree1.CaretChange
' set column headers based on selected item
Dim ID As Integer
ID = AxSftTree1.get_Item(e.itemIndex).ID
If ID = m_InboxFolder Or ID = m_OutboxFolder Or ID = m_SavedFolder Or ID = m_DeletedFolder Then
AxSftTree1.get_Header(0).Text = "Folder"
AxSftTree1.get_Header(1).Text = "Description"
AxSftTree1.get_Header(2).Text = "" ' we can use this to merge the adjacent title
AxSftTree1.get_Header(3).Text = "Msgs"
Else
AxSftTree1.get_Header(0).Text = "From"
AxSftTree1.get_Header(1).Text = "Subject"
AxSftTree1.get_Header(2).Text = "Received"
AxSftTree1.get_Header(3).Text = "Size"
End If
End Sub
Private Sub AxSftTree1_ItemClick(ByVal sender As Object, ByVal e As AxSftTreeLib70._DSftTreeEvents_ItemClickEvent) Handles AxSftTree1.ItemClick
Dim AreaType = e.areaType
If AreaType = SftTreeAreaTypeConstants.constSftTreeButton Then
If (AxSftTree1.get_Item(e.itemIndex).Expanded) Then
AxSftTree1.get_Item(e.itemIndex).Collapse(True)
Else
AxSftTree1.get_Item(e.itemIndex).Expand(True, False)
End If
ElseIf AreaType = SftTreeAreaTypeConstants.constSftTreeText Then
' edit description
If e.colIndex = 1 Then
AxSftTree1.get_Cell(e.itemIndex, e.colIndex).Edit(0, 0)
End If
ElseIf AreaType = SftTreeAreaTypeConstants.constSftTreeColumnHeader Then
Dim Ascending As Boolean = True
If AxSftTree1.get_Header(e.colIndex).Image.Appearance = SftPictureImageConstants.sftImageSortAsc Then
Ascending = False
End If
' we have to sort based on current column headers
Dim ItemIndex As Integer
ItemIndex = AxSftTree1.Items.Current
Dim ID As Integer
ID = 0
If ItemIndex >= 0 Then
ID = AxSftTree1.get_Item(ItemIndex).ID
End If
If ID = m_InboxFolder Or ID = m_OutboxFolder Or ID = m_SavedFolder Or ID = m_DeletedFolder Then
' we're on a folder, so sort on folder level
If Ascending Then
If (e.colIndex = 3) Then
' last column is sorted by Cell.Data (numeric values)
AxSftTree1.Items.SortDependents(-1, e.colIndex, SftTreeSortTypeConstants.sortSftTreeAscCellItemData)
Else
AxSftTree1.Items.SortDependents(-1, e.colIndex, SftTreeSortTypeConstants.sortSftTreeAscending)
End If
Else
If (e.colIndex = 3) Then
AxSftTree1.Items.SortDependents(-1, e.colIndex, SftTreeSortTypeConstants.sortSftTreeDscCellItemData)
Else
AxSftTree1.Items.SortDependents(-1, e.colIndex, SftTreeSortTypeConstants.sortSftTreeDescending)
End If
End If
Else
' we're on a message, sort inside folders
' now sort the dependents of all folders
ItemIndex = 0
Do
If Ascending Then
If e.colIndex = 3 Then
' last column is sorted by Cell.Data (numeric values)
AxSftTree1.Items.SortDependents(ItemIndex, e.colIndex, SftTreeSortTypeConstants.sortSftTreeAscCellItemData)
Else
AxSftTree1.Items.SortDependents(ItemIndex, e.colIndex, SftTreeSortTypeConstants.sortSftTreeAscending)
End If
Else
If e.colIndex = 3 Then
AxSftTree1.Items.SortDependents(ItemIndex, e.colIndex, SftTreeSortTypeConstants.sortSftTreeDscCellItemData)
Else
AxSftTree1.Items.SortDependents(ItemIndex, e.colIndex, SftTreeSortTypeConstants.sortSftTreeDescending)
End If
End If
ItemIndex = AxSftTree1.get_Item(ItemIndex).NextSibling
Loop While ItemIndex >= 0
End If
' change column header image
AxSftTree1.get_Header(0).Image.Clear()
AxSftTree1.get_Header(1).Image.Clear()
AxSftTree1.get_Header(2).Image.Clear()
AxSftTree1.get_Header(3).Image.Clear()
If (Ascending) Then
AxSftTree1.get_Header(e.colIndex).Image.Appearance = SftPictureImageConstants.sftImageSortAsc
Else
AxSftTree1.get_Header(e.colIndex).Image.Appearance = SftPictureImageConstants.sftImageSortDesc
End If
' update column headers by calling CaretChange
AxSftTree1_CaretChange(Me, New _DSftTreeEvents_CaretChangeEvent(AxSftTree1.Items.Current))
End If
End Sub
Private Sub AxSftTree1_ItemDblClick(ByVal sender As Object, ByVal e As AxSftTreeLib70._DSftTreeEvents_ItemDblClickEvent) Handles AxSftTree1.ItemDblClick
Dim AreaType As SftTreeAreaTypeConstants = e.areaType
If AreaType = SftTreeAreaTypeConstants.constSftTreeText Or AreaType = SftTreeAreaTypeConstants.constSftTreeButton Then
' if an item on level 1 or lower is clicked, it's an
' email message, display message box
If AxSftTree1.get_Item(e.itemIndex).Level > 0 And AreaType = SftTreeAreaTypeConstants.constSftTreeText Then
MessageBox.Show("You could be viewing the message from " & AxSftTree1.get_Cell(e.itemIndex, 0).Text & _
" with the subject '" & AxSftTree1.get_Cell(e.itemIndex, 1).Text + "'.")
Else
' otherwise just expand or collapse the item
If (AxSftTree1.get_Item(e.itemIndex).Expanded) Then
AxSftTree1.get_Item(e.itemIndex).Collapse(True)
Else
AxSftTree1.get_Item(e.itemIndex).Expand(True, False)
End If
End If
ElseIf AreaType = SftTreeAreaTypeConstants.constSftTreeColumnRes Then
If e.colIndex >= 0 Then
AxSftTree1.get_Column(e.colIndex).MakeOptimal()
AxSftTree1.Items.RecalcHorizontalExtent()
Else
AxSftTree1.Splitter.MakeOptimal()
End If
End If
End Sub
Private Sub AxSftTree1_EditAllowed(ByVal sender As Object, ByVal e As AxSftTreeLib70._DSftTreeEvents_EditAllowedEvent) Handles AxSftTree1.EditAllowed
' Only allow editing in column 1
If e.colIndex = 1 Then
e.allowed = True
Else
e.allowed = False
End If
End Sub
Private Sub AxSftTree1_EditInitializing(ByVal sender As Object, ByVal e As AxSftTreeLib70._DSftTreeEvents_EditInitializingEvent) Handles AxSftTree1.EditInitializing
' LeftPix/TopPix/WidthPix/HeightPix describes the current cell AreaType
' we need to return the position and size needed for editing.
' In this example, we use the height of the control on the form
' and center it over the cell.
e.topPix = e.topPix + (e.heightPix - EditControl.Height) / 2
e.heightPix = EditControl.Height
' Set the text in the control used for cell editing and
' set other control-specific properties
EditControl.Width = 200
EditControl.Text = AxSftTree1.get_Cell(e.editIndex, e.editCol).Text
EditControl.SelectionStart = 0
EditControl.SelectionLength = 999
' Return the control's window handle
e.window = EditControl.Handle.ToInt32()
e.vData = EditControl
' Define navigation keys
' VK_TAB
AxSftTree1.CellEditIntercept(9, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeShiftChar)
' VK_RETURN
AxSftTree1.CellEditIntercept(13, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeShiftChar)
' VK_HOME
AxSftTree1.CellEditIntercept(36, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar)
' VK_END
AxSftTree1.CellEditIntercept(35, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar)
' VK_UP
AxSftTree1.CellEditIntercept(38, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeShiftChar)
' VK_DOWN
AxSftTree1.CellEditIntercept(40, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeShiftChar)
End Sub
Private Sub AxSftTree1_EditNavigating(ByVal sender As Object, ByVal e As AxSftTreeLib70._DSftTreeEvents_EditNavigatingEvent) Handles AxSftTree1.EditNavigating
' Process key pressed
AxSftTree1.EditNavigate(e.key, e.shift)
End Sub
Private Sub AxSftTree1_EditValidate(ByVal sender As Object, ByVal e As AxSftTreeLib70._DSftTreeEvents_EditValidateEvent) Handles AxSftTree1.EditValidate
' Validate the new cell contents
Dim S As String = EditControl.Text
S = S.Trim()
If S.Length <= 0 Then
MessageBox.Show("Please enter a description.")
e.inputValid = False
End If
End Sub
Private Sub AxSftTree1_EditEnding(ByVal sender As Object, ByVal e As AxSftTreeLib70._DSftTreeEvents_EditEndingEvent) Handles AxSftTree1.EditEnding
' Save the new cell contents
If e.saveInput Then
AxSftTree1.get_Cell(e.editIndex, e.editCol).Text = EditControl.Text
End If
Dim ctrl As Control = e.vData
ctrl.Visible = False
ctrl.Enabled = False
End Sub
End Class